package com.walter.onomastici;

import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;

import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import com.walter.onomastici.XmlParser;

import android.content.res.AssetManager;

public class Finder {
	
	static final String NODE_SANTO = "santo";
	static final String NODE_ID = "id";
	static final String NODE_GIORNO = "giorno";
	static final String NODE_MESE = "mese";
	static final String NODE_NOME = "nome";
	
	public String cercaData(){
		String[] data = Calendar.getInstance().getTime().toString().split(" ");
		String giorno = new String(data[2]);
		String mese = null;
		if(data[1].equalsIgnoreCase("Jan"))
			mese = new String("Gennaio");
		else if(data[1].equalsIgnoreCase("Feb"))
			mese = new String("Febbraio");
		else if(data[1].equalsIgnoreCase("Mar"))
			mese = new String("Marzo");
		else if(data[1].equalsIgnoreCase("Apr"))
			mese = new String("Aprile");
		else if(data[1].equalsIgnoreCase("May"))
			mese = new String("Maggio");
		else if(data[1].equalsIgnoreCase("Jun"))
			mese = new String("Giugno");
		else if(data[1].equalsIgnoreCase("Jul"))
			mese = new String("Luglio");
		else if(data[1].equalsIgnoreCase("Aug"))
			mese = new String("Agosto");
		else if(data[1].equalsIgnoreCase("Sep"))
			mese = new String("Settembre");
		else if(data[1].equalsIgnoreCase("Oct"))
			mese = new String("Ottobre");
		else if(data[1].equalsIgnoreCase("Nov"))
			mese = new String("Novembre");
		else if(data[1].equalsIgnoreCase("Dec"))
			mese = new String("Dicembre");
		
		String data_ris = new String(giorno+" "+mese+" "+data[5]);
		return data_ris;
	}
	
	public String cercaPerData(String giorno_test,String mese,XmlParser parser,AssetManager manager){
		InputStream stream;
		String risultato = "";
		String giorno = this.cercaGiorno(giorno_test);
		try{
			stream = manager.open("santi.xml");
			Document doc = parser.getDocument(stream);
			NodeList nodeList = doc.getElementsByTagName(NODE_MESE);
			for(int i=0; i<nodeList.getLength(); i++){
				Element meseCiclo = (Element)nodeList.item(i);
				if(parser.getValue(meseCiclo, NODE_NOME).toString().equalsIgnoreCase(mese)){
					for(int k=0;k<meseCiclo.getElementsByTagName(NODE_GIORNO).getLength();k++){
						Element giornoCiclo = (Element)meseCiclo.getElementsByTagName(NODE_GIORNO).item(k);
						if(parser.getValue(giornoCiclo, NODE_ID).toString().equalsIgnoreCase(giorno)){
							for(int l=0;l<giornoCiclo.getElementsByTagName(NODE_SANTO).getLength();l++){
								Element santoCiclo = (Element)giornoCiclo.getElementsByTagName(NODE_SANTO).item(l);
								risultato += parser.getValue(santoCiclo, NODE_SANTO).toString()+"\n";
							}
						}
					}
				}
			}
		}catch(IOException e){
			e.printStackTrace();}
		catch(SAXException e1){
			e1.printStackTrace();}
		catch(ParserConfigurationException e2){
			e2.printStackTrace();}
		return risultato;
	}
	
	private String cercaGiorno(String giorno_test){
		String giorno = null;
		if(giorno_test.equalsIgnoreCase("01"))
			giorno = new String("1");
		else if(giorno_test.equalsIgnoreCase("02"))
			giorno = new String("2");
		else if(giorno_test.equalsIgnoreCase("03"))
			giorno = new String("3");
		else if(giorno_test.equalsIgnoreCase("04"))
			giorno = new String("4");
		else if(giorno_test.equalsIgnoreCase("05"))
			giorno = new String("5");
		else if(giorno_test.equalsIgnoreCase("06"))
			giorno = new String("6");
		else if(giorno_test.equalsIgnoreCase("07"))
			giorno = new String("7");
		else if(giorno_test.equalsIgnoreCase("08"))
			giorno = new String("8");
		else if(giorno_test.equalsIgnoreCase("09"))
			giorno = new String("9");
		else
			giorno = new String(giorno_test);
		
		return giorno;
	}
	
	public String cercaMese(int month){
		String mese = null;
		if(month == 0)
			mese = new String("Gennaio");
		else if(month == 1)
			mese = new String("Febbraio");
		else if(month == 2)
			mese = new String("Marzo");
		else if(month == 3)
			mese = new String("Aprile");
		else if(month == 4)
			mese = new String("Maggio");
		else if(month == 5)
			mese = new String("Giugno");
		else if(month == 6)
			mese = new String("Luglio");
		else if(month == 7)
			mese = new String("Agosto");
		else if(month == 8)
			mese = new String("Settembre");
		else if(month == 9)
			mese = new String("Ottobre");
		else if(month == 10)
			mese = new String("Novembre");
		else if(month == 11)
			mese = new String("Dicembre");
		
		return mese;
	}
	
	public String cercaPerNome(String nome,XmlParser parser,AssetManager manager){
		InputStream stream;
		String risultato = "";
		String giorno_beta = "";
		String mese_beta = "";
		String[] giorno;
		String[] mese;
		
		try{
			stream = manager.open("santi.xml");
			Document doc = parser.getDocument(stream);
			NodeList nodeList = doc.getElementsByTagName(NODE_MESE);
			for(int i=0; i<nodeList.getLength(); i++){
				Element meseCiclo = (Element)nodeList.item(i);
				for(int k=0;k<meseCiclo.getElementsByTagName(NODE_GIORNO).getLength();k++){
					Element giornoCiclo = (Element)meseCiclo.getElementsByTagName(NODE_GIORNO).item(k);
					for(int l=0;l<giornoCiclo.getElementsByTagName(NODE_SANTO).getLength();l++){
						Element santoCiclo = (Element)giornoCiclo.getElementsByTagName(NODE_SANTO).item(l);
						if(parser.getValue(santoCiclo, NODE_SANTO).toString().equalsIgnoreCase(nome)){
							giorno_beta += parser.getValue(giornoCiclo, NODE_ID).toString()+" ";
							mese_beta += parser.getValue(meseCiclo, NODE_NOME).toString()+" ";
						}
					}
				}
			}
		}catch(IOException e){
			e.printStackTrace();}
		catch(SAXException e1){
			e1.printStackTrace();}
		catch(ParserConfigurationException e2){
			e2.printStackTrace();}
		giorno = giorno_beta.split(" ");
		mese = mese_beta.split(" ");
		for(int j=0;j<giorno.length;j++)
			risultato += giorno[j]+" "+mese[j]+"\n";
		return risultato;
	}
}
